package com.liu;

import java.io.File;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author LIU
 * @version 1.0
 * @description TODO
 * @date 2024/2/5 17:32
 * 1. BIO异步方式获取连接并处理webSocket
 *      BIO :同步并阻塞(传统阻塞型)，服务器实现模式为一个连接一个线程，即客户端有连接请求时服务器端就需要启动一个线程进行处理，如果这个线程不做任何事情就会造成不必要的开销
 *      NIO: 同步非阻塞，服务器实现模式为一个线程处理多个请求(连接)，即客户端发送的请求都会注册到多路复用器上，多路复用器轮询到连接有I/O请求就进行处理
 * 2. 按Http协议解析字节流
 * 3. servlet规范实现Request和Response
 * 4. 暂存响应体
 * 5. 按HTTP协议发送响应数据
 * 6. @TODO Tomcat部署应用实现
 */
public class Tomcat {

    public static void main(String[] args) {
        Tomcat tomcat = new Tomcat();
        tomcat.deployApps();
        tomcat.start();
    }


    public void start() {
        try {
            // 线程池
            ExecutorService executorService = Executors.newFixedThreadPool(20);
            // Blocking IO
            ServerSocket serverSocket = new ServerSocket(8080);

            while (true){
                // 阻塞方法，接收客户端数据，没有数据可读时阻塞
                Socket socket = serverSocket.accept();
                executorService.execute(new SocketProcessor(socket));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    /**
     * @description TODO 部署程序
     * @author liuzq
     * @date 2024/2/6 13:00
     */
    public void deployApps() {
        File webapps = new File(System.getProperty("user.dir"), "webapps");
//        System.out.println(webapps.getPath());
//        for (String app : webapps.list()) {
//            deployApp(app);
//        }
    }

    private void deployApp(String app) {
        System.out.println(app);
    }

}
